﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Collections;
using CLab.Common.Constantes;

namespace CLab.Common.View.Utils.Extensions
{
    public static class Combo
    {
        public static void ObtenTitulos(this GandA.Web.UI.Controls.DropDownList combo)
        {
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            //Ejecuta conulta
            combo.DataTextField = Columnas.Descripcion;
            combo.DataValueField = Columnas.IdTitulo;
            combo.DataSource = servicio.EjecutaConsultaSinParametros("spObtenTitulos");
            combo.DataBind();
        }

        public static void ObtenTipoCampo(this GandA.Web.UI.Controls.DropDownList combo)
        {
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parámetros
            
            //Ejecuta consulta
            combo.DataTextField = Columnas.Descripcion;
            combo.DataValueField = Columnas.IdTipoCampo;
            combo.DataSource = servicio.EjecutaConsultaSinParametros("spObtenTipoCampo");
            combo.DataBind();
        }

        public static void ObtenTiempo(this GandA.Web.UI.Controls.DropDownList combo)
        {
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            //Ejecuta conulta
            combo.DataTextField = Columnas.Descripcion;
            combo.DataValueField = Columnas.IdTiempo;
            combo.DataSource = servicio.EjecutaConsultaSinParametros("spObtenTiempo");
            combo.DataBind();
        }

        public static void ObtenSexos(this GandA.Web.UI.Controls.DropDownList combo)
        {
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            //Ejecuta conulta
            combo.DataTextField = Columnas.Descripcion;
            combo.DataValueField = Columnas.IdSexo;
            combo.DataSource = servicio.EjecutaConsultaSinParametros("spObtenSexo");
            combo.DataBind();
        }

        public static void ObtenEstados(this GandA.Web.UI.Controls.ComboBox combo)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            //Ejecuta conulta
            combo.DataTextField = Columnas.NombreEstado;
            combo.DataValueField = Columnas.IdEstado;
            combo.DataSource = servicio.EjecutaConsultaSinParametros("spObtenEstado");
            combo.DataBind();
        }

        public static void ObtenMunicipio(this GandA.Web.UI.Controls.ComboBox combo, int? idEstado)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdEstado, idEstado, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            combo.DataTextField = Columnas.NombreMunicipio;
            combo.DataValueField = Columnas.IdMunicipio;
            combo.DataSource = servicio.EjecutaConsultaConParametros("spObtenMunicipio", parameters);
            combo.DataBind();
        }

        public static void ObtenColonia(this GandA.Web.UI.Controls.ComboBox combo, int? idEstado, int? idMunicipio)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdEstado, idEstado, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta(Parametros.pnIdMunicipio, idMunicipio, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            combo.DataTextField = Columnas.NombreColonia;
            combo.DataValueField = Columnas.IdColonia;
            combo.DataSource = servicio.EjecutaConsultaConParametros("spObtenColonia", parameters);
            combo.DataBind();
        }

        public static void ObtenProcedencia(this GandA.Web.UI.Controls.ComboBox combo, int? idLaboratorio)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdLaboratorio, idLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            combo.DataTextField = Columnas.Descripcion;
            combo.DataValueField = Columnas.IdProcedencia;
            combo.DataSource = servicio.EjecutaConsultaConParametros("spObtenComboProcedencia", parameters);
            combo.DataBind();
        }

        public static void ObtenDoctor(this GandA.Web.UI.Controls.ComboBox combo, int? idLaboratorio)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdLaboratorio, idLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            combo.DataValueField = Columnas.IdDoctor;
            combo.DataTextField = Columnas.Nombre;
            combo.DataSource = servicio.EjecutaConsultaConParametros("spObtenComboDoctor", parameters);
            combo.DataBind();
        }

        public static void ObtenEstudios(this GandA.Web.UI.Controls.ComboBox combo, int? idLaboratorio, bool sinDataSource = true, bool incluyePaq = false)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdLaboratorio, idLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta(Parametros.pnIncPaq, incluyePaq ? 1 : 0, ConsultaServiceReference.Parameter.vEnumType.TinyInt));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            DataTable dt= servicio.EjecutaConsultaConParametros("spObtenComboEstudios", parameters).Tables[0];
            if (!sinDataSource)
            {
                combo.DataTextField = Columnas.NombreEstudio;
                combo.DataValueField = Columnas.IdEstudio;
                combo.DataSource = dt;
                combo.DataBind();
            }
            else
            {
                int index = 0;
                foreach (DataRow row in dt.Rows)
                {
                    combo.ControlComboBox.Items.Add(new System.Web.UI.WebControls.ListItem(row[Columnas.NombreEstudio].ToString(), row[Columnas.IdEstudio].ToString()));
                    combo.ControlComboBox.Items[index].Attributes.Add("_value", row[Columnas.IdEstudio].ToString());
                    combo.ControlComboBox.Items[index].Attributes.Add("_esPaquete", row[Columnas.EsPaquete].ToString());
                    index++;
                }
            }
        }

        public static void ObtenPacientes(this GandA.Web.UI.Controls.ComboBox combo, int? idLaboratorio, bool sinDataSource = true, bool conOpcTodos = false)
        {
            ArrayList parametros = new ArrayList();
            ConsultaServiceReference.ConsultaServiceClient servicio = new ConsultaServiceReference.ConsultaServiceClient();
            //Parametros
            parametros.Add(CreaParametroConsulta(Parametros.pnIdLaboratorio, idLaboratorio, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta(Parametros.pnAgregarOpcTodos, conOpcTodos ? 1 : 0, ConsultaServiceReference.Parameter.vEnumType.Int));
            ConsultaServiceReference.Parameter[] parameters = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(parameters);
            //Ejecuta conulta
            DataTable dt = servicio.EjecutaConsultaConParametros("spObtenComboPacientes", parameters).Tables[0];
            if (!sinDataSource)
            {
                combo.DataTextField = Columnas.Nombre;
                combo.DataValueField = Columnas.IdPaciente;
                combo.DataSource = dt;
                combo.DataBind();
            }
            else
            {
                int index = 0;
                foreach (DataRow row in dt.Rows)
                {
                    combo.ControlComboBox.Items.Add(new System.Web.UI.WebControls.ListItem(row[Columnas.Nombre].ToString(), row[Columnas.IdPaciente].ToString()));
                    combo.ControlComboBox.Items[index].Attributes.Add("_value", row[Columnas.IdPaciente].ToString());
                    index++;
                }
            }
        }

        public static ConsultaServiceReference.Parameter CreaParametroConsulta(string _nombreParametro, object _valor, ConsultaServiceReference.Parameter.vEnumType _type)
        {
            ConsultaServiceReference.Parameter p = new ConsultaServiceReference.Parameter();
            p.nombreParametro = _nombreParametro;
            p.valor = _valor;
            p.type = _type;

            return p;
        }
    }
}
